package copy

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"strings"
)

// 用于检查复制的合法性
//
func copyCheck(src, dst string, items []string) (err error) {
	if len(items) == 0 {
		return errors.New("need items")
	}

	// 2 相同目录不拷贝
	// todo 类似于windows下的自动重命名
	if src == dst {
		return errors.New(fmt.Sprintf("%s and %s  identical (not copied)", src, dst))
	}

	// 目标目录合法性判断
	// 目录是否存在， 是否是目录
	dstStat, err := os.Stat(dst)
	if err != nil {
		return err
	}
	if !dstStat.IsDir() {
		return errors.New("need dir")
	}

	// 对等待拷贝的文件进行一一检查
	for _, item := range items {
		path := filepath.Join(src, item)

		// 子目录判断
		if strings.HasPrefix(dst, path) {
			// dst 是要复制文件的子目录

			// root 下面有test1， test2， test3

			// error
			// 把test1复制到／test1下面
			// src /root
			// dst /root/test1
			// items test2, test3, test1

			// ok
			// src /root
			// dst /root/test1
			// items test2, test3
			return errors.New(fmt.Sprintf("not copy %s to %s", src, dst))
		}

		// 判断源文件存在
		_, err = os.Stat(path)
		if err != nil {
			return err
		}

		// 目标文件是否存在在执行时判断，类似于window

	}

	return nil

}
